package com.syg.middleware.zk.redis;

import com.syg.middleware.zk.redis.enums.CacheTypeEnum;
import org.springframework.data.redis.core.ZSetOperations;

import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface IRedisOperater {
    String KEY_CHAR_SET = "UTF-8";
    String OK = "OK";
    String NO_MEMBER_PARAM = "缺member参数";
    String NX = "NX";
    String PX = "PX";
    String EX = "EX";

    String getNamespace();

    default String key(String key) {
        if (null != key && key.length() != 0) {
            return this.getNamespace() + key;
        } else {
            throw new IllegalArgumentException("key is empty!");
        }
    }

    default byte[] field(Object field) {
        if (null == field) {
            throw new IllegalArgumentException("field is empty!");
        } else {
            String str = String.valueOf(field);
            if (str.length() == 0) {
                throw new IllegalArgumentException("field is empty!");
            } else {
                try {
                    return str.getBytes("UTF-8");
                } catch (UnsupportedEncodingException var4) {
                    throw new RuntimeException(var4);
                }
            }
        }
    }

    Boolean exists(String var1);

    Boolean exists(String var1, boolean var2);

    <T> void set(String var1, T var2);

    <T> void set(String var1, T var2, CacheTypeEnum var3);

    <T> void set(String var1, T var2, CacheTypeEnum var3, long var4);

    <T> void set(String var1, T var2, boolean var3);

    <T> void set(String var1, T var2, boolean var3, CacheTypeEnum var4);

    <T> void set(String var1, T var2, boolean var3, CacheTypeEnum var4, long var5);

    <T> void setex(String var1, T var2, int var3);

    <T> void setex(String var1, T var2, int var3, boolean var4);

    <T> void setex(String var1, T var2, int var3, CacheTypeEnum var4);

    <T> void setex(String var1, T var2, int var3, CacheTypeEnum var4, long var5);

    <T> boolean setnx(String var1, T var2, int var3);

    <T> boolean setnx(String var1, T var2, int var3, CacheTypeEnum var4);

    <T> boolean setnx(String var1, T var2, int var3, CacheTypeEnum var4, long var5);

    <T> T get(String var1);

    <T> T getWithoutSerialize(String var1);

    <T> T get(String var1, CacheTypeEnum var2);

    <T> T get(String var1, CacheTypeEnum var2, long var3);

    Long ttl(String var1);

    Long ttl(String var1, boolean var2);

    <T> T get(String var1, boolean var2);

    <T> T get(String var1, boolean var2, CacheTypeEnum var3, long var4);

    <T> T get(String var1, boolean var2, CacheTypeEnum var3, long var4, boolean var6);

    <T> T get(String var1, CacheTypeEnum var2, long var3, Object var5);

    <T> T get(String var1, boolean var2, CacheTypeEnum var3, long var4, Object var6, boolean var7);

    <T> T getSet(String var1, T var2);

    Long delete(String var1);

    Long delete(String var1, boolean var2);

    boolean expire(String var1, int var2);

    boolean expire(String var1, int var2, boolean var3);

    long incr(String var1);

    long incrBy(String var1, int var2);

    long decr(String var1);

    long decrBy(String var1, int var2);

    <F> Boolean hexists(String var1, F var2);

    <F, T> long hset(String var1, F var2, T var3);

    <F, T> long hset(String var1, F var2, T var3, boolean var4);

    <F, T> boolean hsetnx(String var1, F var2, T var3);

    <F, T> void hmset(String var1, Map<F, T> var2);

    <F, T> T hget(String var1, F var2);

    <F, T> T hget(String var1, F var2, boolean var3);

    <T> Map<String, T> hgetAll(String var1);

    <T> Map<String, T> hgetAll(boolean var1, String var2);

    <T> Map<String, T> hgetAll(String var1, boolean var2);

    <T> Map<String, T> hgetAll(boolean var1, String var2, boolean var3);

    <T> List<T> hmget(String var1, Object... var2);

    <T> List<T> hmget(boolean var1, String var2, Object... var3);

    long hdel(String var1, Object... var2);

    long hdel(boolean var1, String var2, Object var3);

    <F> long hincrBy(String var1, F var2, int var3);

    <T> T lpop(String var1);

    <T> T rpop(String var1);

    <T> Long lpush(String var1, T... var2);

    <T> Long lpushx(String var1, T... var2);

    <T> Long rpush(String var1, T... var2);

    <T> Long rpushx(String var1, T... var2);

    <T> T lindex(String var1, int var2);

    <T> Long linsertAfter(String var1, T var2, T var3);

    <T> Long linsertBefore(String var1, T var2, T var3);

    Long llen(String var1);

    <T> List<T> lrange(String var1, int var2, int var3);

    <T> long lrem(String var1, int var2, T var3);

    <T> boolean lset(String var1, int var2, T var3);

    boolean ltrim(String var1, int var2, int var3);

    <T> long zdd(String var1, double var2, T var4);

    long zcount(String var1, double var2, double var4);

    <T> Set<T> zrange(String var1, long var2, long var4);

    <T> Set<ZSetOperations.TypedTuple<T>> zrangeWithScores(String var1, long var2, long var4);

    <T> Set<T> zrangeByScore(String var1, double var2, double var4);

    <T> Set<ZSetOperations.TypedTuple<T>> zrangeByScoreWithScores(String var1, double var2, double var4);

    long zrem(String var1, Object... var2);

    Object eval(String var1, String var2, Object... var3);

    Object evalSha(byte[] var1, String var2, Object... var3);

    byte[] scriptLoad(byte[] var1, String var2);

    long sadd(String var1, Object... var2);

    long scard(String var1);

    <T> boolean sisMember(String var1, T var2);

    <T> Set<T> smembers(String var1);

    <T> T spop(String var1);

    <T> List<T> srandMember(String var1, int var2);

    <T> T srandMember(String var1);

    long srem(String var1, Object... var2);

    List<String> multiGet(Collection<String> var1);

    <T> boolean setNxPx(String var1, T var2, long var3);

    <T> boolean setNxPxWithSerialize(String var1, T var2, long var3);

    <T> boolean setNxEx(String var1, T var2, long var3);

    <T> boolean setNxExWithSerialize(String var1, T var2, long var3);

    <T> long lrem(String var1, int var2, byte[] var3);
}
